package java_1124;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Created by xiebang
 * Description
 * User:小谢
 * Date:2021-11-24
 * Time:17:41
 */
public class TestJDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1.创建DataSource对象(用于配置如何连接MySQL),它的生命周期应该是跟随整个程序
        DataSource dataSource = new MysqlDataSource();
        //接下来需要配置URL,User,Password ,需要对dataSource进行向下转型
  // 向下转型 需要指定访问哪个数据库服务器中的数据库   协议名       ip地址    端口号(为了区分一台主机的多个服务器)
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_1124?characterEncoding=utf-8");
        //                                                                 要访问的数据库名  编码格式UTF-8
        ((MysqlDataSource)dataSource).setUser("root");//用户名默认为root
        ((MysqlDataSource)dataSource).setPassword("xcb@19980521");//为登录密码

        //2.Connection(表示建立好的一次连接)建立连接,建立连接的意义是为了验证当前的网络通信是否正常,如果不正常就会抛出SQLExcepion异常,
        //connection对象生命周期应该是比较短的,每个请求创建一个新的连接
        Connection connection = dataSource.getConnection();


        //3.拼接SQL语句,用到PrepareStatement对象
        //方式1
//        //String sql = "insert into student values(1,刘一,2)";//方式一;也可以动态的拼接进去
//        PreparedStatement statement = connection.prepareStatement(sql);
        //方式二:动态拼接
        int id = 1;
        String name = "刘一";
        int class_id = 2;
        String sql = "insert into student values(?,?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);//1为第一个? 1/2/3为?的下标
        statement.setString(2,name);
        statement.setInt(3,class_id);

        //4.拼装好了之后,就可以执行SQL了
        // insert delete update 都使用executeUpdate方法来执行
        // select 使用 executeQuery来执行
        //返回值表示此次操作修改了多行.当返回值大于1时就操作成功了
        int ret = statement.executeUpdate();
        System.out.println("ret :" + ret);

        //执行完毕后,需要关闭释放相关资源
        statement.close();
        connection.close();
    }
}
